It is desirable to be able to determine whether or not a data processing apparatus is running correctly. In a data processing apparatus that is operating and receiving and transmitting data, both the code and the data are generally modifiable and therefore open to attack such that one cannot be sure that the result of any measurement performed has not been tampered with.
On power up of a data processing apparatus, there is a boot up process where boot up software that configures the system is executed. This is generally a secure process where boot up software that is stored in a read only memory ROM, located in a secure location is executed. This software may have access to secret data such as cryptographic keys that are stored in non-volatile storage which may only be accessible from this code. The boot up software cannot be tampered with being stored in ROM and can be used to load and validate software using the secret keys, such that at start up one can be sure that the data processing apparatus has not been tampered with and only validated code has been loaded. Once the data processing apparatus starts to execute code, receive and transmit data and respond to external control signals, the chances of the data processing apparatus being tampered with increases.
It would be desirable to be able to test the current state of a data processing apparatus at certain times to determine the current integrity of the data processing apparatus. Such a testing mechanism should itself be resistant to external attacks.